#pragma once

#include <iostream>
#include <string>
#include "InetAddr.hpp"

// 封装fd，保证给每一个fd一套缓冲

class Reactor;
class Connection;

using handler_t = std::function<std::string(std::string& s)>;

//基类
class Connection
{
public:
    Connection(): _events(0), _owner(nullptr)
    {

    }

    virtual void Recver() = 0;
    virtual void Sender() = 0;
    virtual void Excepter() = 0;
    virtual int GetSockFd() = 0;

    void SetEvent(const uint32_t& events)
    {
        _events = events;
    }

    uint32_t GetEvent()
    {
        return _events;
    }

    void SetOwner(Reactor* owner)
    {
        _owner = owner;
    }

    Reactor* GetOwner()
    {
        return _owner;
    }

    void RegisterHandler(handler_t handler)
    {
        _handler = handler;
    }

    ~Connection()
    {

    }

private:
    //回指指针
    Reactor* _owner;

    //关心事件
    uint32_t _events;

public:
    // 基类中定义了一个回调函数
    handler_t _handler;
};
